package algorithm.variousAlgorithm;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName: GoodDaysToRobBank
 * @Description 2100. 适合打劫银行的日子
 * 你和一群强盗准备打劫银行。给你一个下标从 0开始的整数数组security，其中security[i]是第 i天执勤警卫的数量。日子从 0开始编号。
 * 同时给你一个整数time。
 *
 * 如果第 i天满足以下所有条件，我们称它为一个适合打劫银行的日子：
 *
 * 第 i天前和后都分别至少有 time天。
 * 第 i天前连续 time天警卫数目都是非递增的。
 * 第 i天后连续 time天警卫数目都是非递减的。
 * 更正式的，第 i 天是一个合适打劫银行的日子当且仅当：
 * security[i - time] >= security[i - time + 1] >= ... >= security[i] <= ... <= security[i + time - 1] <= security[i + time].
 *
 * 请你返回一个数组，包含 所有 适合打劫银行的日子（下标从 0开始）。返回的日子可以 任意顺序排列。
 *
 * @Author skywingking
 * @Date 2022/3/6 4:33 下午
 **/
public class GoodDaysToRobBank {
    public List<Integer> goodDaysToRobBank(int[] security, int time) {
        int n = security.length;
        int[] left = new int[n];
        int[] right = new int[n];
        for(int i = 1; i < n; i++){
            if(security[i] <= security[i - 1]){
                left[i] = left[i - 1] + 1;
            }
            if(security[n - i - 1] <= security[n - i]){
                right[n - i - 1] = right[n - i] + 1;
            }
        }
        List<Integer> ans = new ArrayList<>();
        for (int i = time; i < n - time; i++) {
            if (left[i] >= time && right[i] >= time) {
                ans.add(i);
            }
        }
        return ans;
    }
}